home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 10 / AACD 10.iso / AACD / Games / MAME / src / vidhrdw / rockrage.c < prev    next >
C/C++ Source or Header  |  2000-04-04  |  3KB  |  114 lines

  1. #include "driver.h"
  2. #include "vidhrdw/generic.h"
  3. #include "vidhrdw/konamiic.h"
  4.  
  5. static int layer_colorbase[2];
  6. static int rockrage_vreg;
  7.  
  8. void rockrage_vh_convert_color_prom(unsigned char *palette, unsigned short *colortable,const unsigned char *color_prom)
  9. {
  10.     int i;
  11.     #define TOTAL_COLORS(gfxn) (Machine->gfx[gfxn]->total_colors * Machine->gfx[gfxn]->color_granularity)
  12.     #define COLOR(gfxn,offs) (colortable[Machine->drv->gfxdecodeinfo[gfxn].color_codes_start + offs])
  13.  
  14.     /* build the lookup table for sprites. Palette is dynamic. */
  15.     for (i = 0;i < TOTAL_COLORS(0)/2; i++){
  16.         COLOR(0,i) = 0x00 + (color_prom[i] & 0x0f);
  17.         COLOR(0,(TOTAL_COLORS(0)/2)+i) = 0x10 + (color_prom[0x100+i] & 0x0f);
  18.     }
  19. }
  20.  
  21. /***************************************************************************
  22.  
  23.   Callback for the K007342
  24.  
  25. ***************************************************************************/
  26.  
  27. static void tile_callback(int layer, int bank, int *code, int *color)
  28. {
  29.     if (layer == 1)
  30.         *code |= ((*color & 0x40) << 2) | ((bank & 0x01) << 9);
  31.     else
  32.         *code |= ((*color & 0x40) << 2) | ((bank & 0x03) << 10) | ((rockrage_vreg & 0x04) << 7) | ((rockrage_vreg & 0x08) << 9);
  33.     *color = layer_colorbase[layer] + (*color & 0x0f);
  34. }
  35.  
  36. /***************************************************************************
  37.  
  38.   Callback for the K007420
  39.  
  40. ***************************************************************************/
  41.  
  42. static void sprite_callback(int *code,int *color)
  43. {
  44.     *code |= ((*color & 0x40) << 2) | ((*color & 0x80) << 1)*(rockrage_vreg << 1);
  45.     *code = (*code << 2) | ((*color & 0x30) >> 4);
  46.     *color = 0;
  47. }
  48.  
  49.  
  50. WRITE_HANDLER( rockrage_vreg_w ){
  51.     /* bits 4-7: unused */
  52.     /* bit 3: bit 4 of bank # (layer 0) */
  53.     /* bit 2: bit 1 of bank # (layer 0) */
  54.     /* bits 0-1: sprite bank select */
  55.  
  56.     if ((data & 0x0c) != (rockrage_vreg & 0x0c))
  57.         tilemap_mark_all_tiles_dirty(ALL_TILEMAPS);
  58.  
  59.     rockrage_vreg = data;
  60. }
  61.  
  62. /***************************************************************************
  63.  
  64.     Start the video hardware emulation.
  65.  
  66. ***************************************************************************/
  67.  
  68. int rockrage_vh_start(void)
  69. {
  70.     layer_colorbase[0] = 0x00;
  71.     layer_colorbase[1] = 0x10;
  72.  
  73.     if (K007342_vh_start(0,tile_callback))
  74.     {
  75.         return 1;
  76.     }
  77.  
  78.     if (K007420_vh_start(1,sprite_callback))
  79.     {
  80.         K007420_vh_stop();
  81.         return 1;
  82.     }
  83.  
  84.     return 0;
  85. }
  86.  
  87. void rockrage_vh_stop(void)
  88. {
  89.     K007342_vh_stop();
  90.     K007420_vh_stop();
  91. }
  92.  
  93. /***************************************************************************
  94.  
  95.   Screen Refresh
  96.  
  97. ***************************************************************************/
  98.  
  99. void rockrage_vh_screenrefresh(struct osd_bitmap *bitmap,int full_refresh)
  100. {
  101.     K007342_tilemap_update();
  102.  
  103.     if (palette_recalc())
  104.         tilemap_mark_all_pixels_dirty(ALL_TILEMAPS);
  105.  
  106.     tilemap_render( ALL_TILEMAPS );
  107.  
  108.     K007342_tilemap_draw( bitmap, 0, TILEMAP_IGNORE_TRANSPARENCY );
  109.     K007420_sprites_draw( bitmap );
  110.     K007342_tilemap_draw( bitmap, 0, 1 | TILEMAP_IGNORE_TRANSPARENCY );
  111.     K007342_tilemap_draw( bitmap, 1, 0 );
  112.     K007342_tilemap_draw( bitmap, 1, 1 );
  113. }
  114.